home *** CD-ROM | disk | FTP | other *** search
/ The Arsenal Files 4 / The Arsenal Files 4 (Arsenal Computer).ISO / casm / au116-as.exe / UTIL / PARSE.CPP < prev    next >
C/C++ Source or Header  |  1994-12-13  |  2KB  |  65 lines

  1. #include "..\au.hpp"
  2.  
  3. /**************************************************************************/
  4. void generic_parse_comm_line(AU *au, int argc, char *argv[],
  5.                              BYTE (*parse_func)(PARSE_PARAMS))
  6. {
  7.     char *cur_argv;
  8.     BYTE files_only = FALSE;
  9.     char string[128];
  10.  
  11.     for (int i=0; i<argc; i++)
  12.     {
  13.         strcpy(string, argv[i]);
  14.         subst_environ(au, string);
  15.         cur_argv=string;
  16.         if (cur_argv[0] == '\0')
  17.             continue;
  18.  
  19.         /* dash option */
  20.         if ((cur_argv[0]=='-' || cur_argv[0]=='/') && !files_only)
  21.         {
  22.             char option = toupper(cur_argv[1]);
  23.  
  24.             if (option == '-' || option == '/')
  25.             {
  26.                 files_only = TRUE;
  27.                 continue;
  28.             }
  29.             if (option == '#')
  30.             {
  31.                 fill_list_from_BBS(au, cur_argv+2);
  32.                 continue;
  33.             }
  34.             if (parse_func(au, option, "", PARSE_SINGLE_OPTION))
  35.                 continue;
  36.  
  37.             if (cur_argv[2]=='\0')    /* parameter continues on next */
  38.             {
  39.                 strcpy(string, argv[++i]);
  40.                 subst_environ(au, string);
  41.                 cur_argv=string;
  42.             }
  43.             else
  44.                 cur_argv+=2;          /* advance it 2 characters */
  45.  
  46.             au->curOpt[0] = '-';
  47.             au->curOpt[1] = option;
  48.             au->curOpt[2] = '\0';
  49.             au->curVal = cur_argv;
  50.  
  51.             parse_func(au, option, cur_argv, PARSE_PARAM_OPTION);
  52.         }
  53.         else if (cur_argv[0] == '@' && access(cur_argv, 0x00) != 0)
  54.             process_at_file(au, &au->process_list, cur_argv+1);
  55.         else
  56.         {
  57.             if (!parse_func(au, '\0', cur_argv, PARSE_FILESPEC))
  58.                 au->process_list.add(cur_argv);
  59.         }
  60.     }
  61.     parse_func(au, '\0', NULL, PARSE_POST_CHECK);
  62.     return;
  63. }
  64.  
  65.